home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Taifun / Taifun 102 (1989-08-15)(Ossowski, Stefan)(DE)(PD).zip / Taifun 102 (1989-08-15)(Ossowski, Stefan)(DE)(PD).adf / Life_Research / Life in Line 1.3 < prev    next >
Text File  |  1989-04-21  |  16KB  |  591 lines

  1. CLEAR ,71000&
  2. SCREEN 1,640,400,2,2
  3. WINDOW 3,,(0,0)-(631,224),16,1
  4.  
  5. MENU 1,0,1,"about"
  6. MENU 1,1,1,"                                "
  7. MENU 1,2,1,"  Life in Line Research Program "
  8. MENU 1,3,1,"                                "
  9. MENU 1,4,1,"           Release 1.3          "
  10. MENU 1,5,1,"                                "
  11. MENU 1,6,1,"   March 1989 by Rainer Umbach  "
  12. MENU 1,7,1,"                                "
  13.  
  14. ON ERROR GOTO errorhandling
  15. DEFINT a,c,d,f,g,i-l,n-z:DEFDBL b,e,m,h:an=600:am=2000
  16. DIM z(an),m(an),prt(an),mem(am),comm$(am),b$(25),zz(7)
  17. ter=0:rad=2:rgl=20:pmd=0
  18.  
  19. putitin:
  20.   WINDOW 3:CLS
  21.   PRINT :PRINT " Life in Line Research Program Release 1.2"
  22.   PRINT :INPUT " DISPLAY = 0, CALCULATION = 1, DOC = 2, Stop = 3  : ",wa
  23.   IF wa=3 THEN END
  24.   IF wa=2 THEN DOC
  25.   PRINT :PRINT " ===================================================="
  26.   PRINT :PRINT " return to maintain old value"
  27.          PRINT " number & return to set new value"
  28.   PRINT :PRINT " RAD (old)         :"rad
  29.   i=0:INPUT " RAD (2-3)         : ",i
  30.   IF i=2 OR i=3 THEN ter=i-2:rad=i
  31.   PRINT :PRINT " do not enter odd rule numbers":PRINT
  32.   PRINT " RGL (old)         :"rgl 
  33.   i=0
  34.   IF ter THEN 
  35.     INPUT" RGL (2-254 step 2): ",i
  36.     IF i>0 AND i<256 THEN rgl=i
  37.   ELSE
  38.     INPUT" RGL (2-62 step 2) : ",i
  39.     IF i>0 AND i<64 THEN rgl=i
  40.   END IF
  41.   h=rgl:rgl$=""
  42.   FOR n=7 TO 0 STEP -1
  43.     zz(n)=0:IF h=>2^n THEN zz(n)=1:h=h-2^n:h$="1":ELSE h$="0"
  44.     rgl$=rgl$+h$
  45.   NEXT n
  46.   PRINT :PRINT " ===================================================="
  47.   IF wa=1 THEN turboCALCULATION
  48.   IF wa=0 THEN CALCULATIONandDISPLAY 
  49. GOTO putitin
  50.  
  51. errorhandling:
  52.   WINDOW 4,"  ***  Error ***  ***  Error ***  ***  Error ***  ***  Error *** ",(50,90)-(581,115),0,1
  53.   CLS:PRINT
  54.   IF ERR=53 THEN
  55.     PRINT " the file you wanted to load doesn´t exist"
  56.   ELSE
  57.     PRINT " error#"ERR
  58.   END IF
  59.   WHILE (a$="")
  60.     a$=INKEY$
  61.   WEND:a$=""
  62.   WINDOW CLOSE 4
  63.   RESUME putitin
  64.  
  65. DOC:
  66.   OPEN "DOC" FOR INPUT AS #1:cn=0:a$="":CLS
  67.   PRINT :PRINT " just a moment ...":PRINT 
  68.   GOSUB readDOC
  69.   WHILE(1)
  70.     GOSUB showDOC
  71.     GOSUB readDOC
  72.     GOSUB nextpage
  73.     GOSUB continue
  74.   WEND
  75.   
  76.   showDOC:
  77.     FOR n=1 TO 25
  78.       PRINT b$(n);:b$(n)=""
  79.     NEXT n
  80.     RETURN
  81.     
  82.   readDOC:
  83.     FOR n=1 TO 25
  84.       lesen:
  85.       IF EOF(1) THEN
  86.         CLOSE
  87.         GOSUB continue:GOTO putitin
  88.       ELSE
  89.         c$=INPUT$(1,#1)
  90.         b$(n)=b$(n)+c$  
  91.         IF ASC(c$)=10 THEN weiter
  92.       END IF
  93.       GOTO lesen
  94.       weiter:
  95.     NEXT n
  96.     RETURN
  97.       
  98. nextpage:
  99.   FOR m=1 TO 3
  100.     PALETTE 1,0,0,0
  101.     FOR n=1 TO 1000:NEXT n
  102.     PALETTE 1,1,1,1
  103.     FOR n=1 TO 1000:NEXT n
  104.   NEXT m        
  105.   RETURN
  106.         
  107. continue:
  108.   WHILE (a$="")
  109.     a$=INKEY$
  110.   WEND:a$=""
  111.   RETURN
  112.  
  113. turboCALCULATION:
  114.  
  115.   CLS:PRINT
  116.   a1=ter AND (rgl=88 OR rgl=152)
  117.   a2=ter=0 AND (rgl=20) 
  118.   IF a1 OR a2 THEN
  119.     INPUT" recognize pattern to economize output (0 or 1) ";i:PRINT 
  120.     IF i=1 THEN em=rgl+ter/10:ELSE em=0
  121.     IF em<>0 THEN 
  122.       INPUT " check pattern at generation #",checkit
  123.       PRINT:IF checkit<1 THEN GOTO turboCALCULATION
  124.     END IF
  125.   END IF
  126.   INPUT " break off calculation at generation #",breakit
  127.   IF em<>0 AND breakit<=checkit THEN turboCALCULATION
  128.   IF em=0 AND breakit<1 THEN turboCALCULATION
  129.   PRINT :INPUT " check even patterns too (0 or 1): ",i
  130.   IF i=1 THEN stp=1:ELSE stp=2
  131.   PRINT 
  132.   INPUT " first MST: ",msta
  133.   IF stp=2 THEN IF msta/2=INT(msta/2) THEN msta=msta-1
  134.   IF msta<0 THEN msta=1
  135.   PRINT:nrmem=0 
  136.   PRINT " save solutions    : s"
  137.   PRINT " display solutions : d"
  138.   PRINT " restart program   : r"
  139.   PRINT :csrl=CSRLIN
  140.   
  141.   FOR bit=msta TO msta+10^5 STEP stp
  142.     IF nrmem>am THEN sichern
  143.     LOCATE csrl,2:PRINT "MST:"bit
  144.     bit$="":h=bit:ypos=0
  145.     GOSUB DECtoBIN
  146.     h=LEN(bit$):h1=INT((an-h)/2):hl=h1:hr=h1+h
  147.     IF hlm=0 AND hrm=0 THEN hlm=hr-3:hrm=hl+3
  148.     FOR n=hlm TO hrm
  149.       z(n)=0:m(n)=0
  150.     NEXT n
  151.     FOR n=h1 TO h1+h
  152.       IF MID$(bit$,(n-h1)+1,1)="1" THEN z(n)=1:hs=1
  153.     NEXT n
  154.     PRINT " solutions: "nrmem:hl=hl-3:hr=hr+3
  155.     
  156.   Schleife:
  157.     IF hs=1 THEN  
  158.       IF em=152.1 AND ypos=checkit THEN nm=0:GOSUB EM3152:IF nm THEN marke
  159.       IF em=88.1  AND ypos=checkit THEN nm=0:GOSUB EM388 :IF nm THEN marke
  160.       IF em=20    AND ypos=checkit THEN nm=0:GOSUB EM220 :IF nm THEN marke
  161.       IF ypos=breakit THEN  ypos=0:nrmem=nrmem+1:mem(nrmem)=bit:GOTO marke
  162.       IF ter THEN    
  163.         FOR n=hl TO hr
  164.           m(n)=zz(z(n-3)+z(n-2)+z(n-1)+z(n)+z(n+1)+z(n+2)+z(n+3))
  165.         NEXT n
  166.       ELSE                                                       
  167.         FOR n=hl TO hr
  168.           m(n)=zz(z(n-2)+z(n-1)+z(n)+z(n+1)+z(n+2))
  169.         NEXT n
  170.       END IF
  171.       hs=0:FOR n=hl-rad TO hr+rad:z(n)=m(n):IF z(n) THEN hs=1
  172.       NEXT n:ypos=ypos+1
  173.       IF ter THEN    
  174.         hlh=z(hl+3)+z(hl+2)+z(hl+1)+z(hl)
  175.         hrh=z(hr-3)+z(hr-2)+z(hr-1)+z(hr)
  176.         IF hlh<>0 AND hl>6 THEN hl=hl-3
  177.         IF hrh<>0 AND hr<an-6 THEN hr=hr+3
  178.         IF hl<hlm THEN hlm=hl
  179.         IF hr>hrm THEN hrm=hr
  180.         hlh=hlh+z(hl+4)+z(hl+5)+z(hl+6)
  181.         hrh=hrh+z(hr-4)+z(hr-5)+z(hr-6)
  182.         IF hlh=0 THEN hl=hl+3
  183.         IF hrh=0 THEN hr=hr-3
  184.       ELSE
  185.         hlh=z(hl+2)+z(hl+1)+z(hl)
  186.         hrh=z(hr-2)+z(hr-1)+z(hr)
  187.         IF hlh<>0 AND hl>4 THEN hl=hl-2
  188.         IF hrh<>0 AND hr<an-4 THEN hr=hr+2
  189.         IF hl<hlm THEN hlm=hl
  190.         IF hr>hrm THEN hrm=hr
  191.         hlh=hlh+z(hl+3)+z(hl+4)
  192.         hrh=hrh+z(hr-3)+z(hr-4)
  193.         IF hlh=0 THEN hl=hl+2
  194.         IF hrh=0 THEN hr=hr-2
  195.       END IF
  196.       a$=INKEY$:IF a$="s" THEN sichern
  197.                 IF a$="d" THEN 
  198.                   IF nrmem>0 THEN
  199.                     lload=1:lnr=0:GOTO gettingMSTsomehow
  200.                   ELSE
  201.                     GOTO putitin
  202.                   END IF
  203.                 END IF
  204.                 IF a$="r" THEN putitin
  205.       GOTO Schleife
  206.     END IF
  207.   marke:
  208.   NEXT bit
  209.  
  210. sichern:
  211.   OPEN "MST.dat" FOR OUTPUT AS #3
  212.   WRITE #3,nrmem
  213.   FOR n=1 TO nrmem
  214.     WRITE #3,mem(n)
  215.   NEXT n
  216.   CLOSE
  217.   
  218. GOTO putitin
  219.  
  220. CALCULATIONandDISPLAY:
  221.  
  222. j=0:PRINT:INPUT" if exists load MST.dat file      (0 or 1): ",j
  223. lload=0
  224. IF j=1 THEN 
  225.   lload=1:lnr=0:com=0
  226.   OPEN "MST.dat" FOR INPUT AS #3
  227.   INPUT #3,nrmem
  228.   FOR n=1 TO nrmem
  229.     INPUT #3,mem(n)
  230.   NEXT n
  231.   CLOSE
  232. ELSE
  233.   j=0:INPUT " if exists load presentation file (0 or 1): ",j
  234.   IF j=1 THEN
  235.     nam$=RIGHT$(STR$(rad),LEN(STR$(rad))-1)+"."+RIGHT$(STR$(rgl),LEN(STR$(rgl))-1) 
  236.     lload=1:lnr=0:com=1
  237.     OPEN nam$ FOR INPUT AS #3
  238.     INPUT #3,nrmem
  239.     FOR n=1 TO nrmem
  240.       INPUT #3,mem(n)
  241.       INPUT #3,comm$(n)
  242.     NEXT
  243.     CLOSE
  244.   END IF
  245. END IF
  246. CLS
  247.  
  248. gettingMSTsomehow:
  249.   IF lload THEN                           
  250.     lnr=lnr+1:h=mem(lnr):MST=h:IF com THEN lif=198:ELSE lif=206
  251.     GOSUB DECtoBIN
  252.   ELSE
  253.     LOCATE 1,1
  254.     PRINT "restart program  : *                "
  255.     PRINT "binary input     : ,aba             "
  256.     PRINT "decimal input    : xyz              "
  257.     PRINT "mutation mode    : xyz#             "
  258.     PRINT "magnify mode     : ,aba. or  xyz.   "
  259.     PRINT "casual pattern   : <wide>           "
  260.     IF pmd THEN
  261.       PRINT "printer mode off : p                "
  262.     ELSE
  263.       PRINT "printer mode on  : p                "
  264.     END IF
  265.     IF eov THEN
  266.       PRINT "short Input off  : -                "
  267.       PRINT "MST: "eov$"+" 
  268.       in$="MST: +"
  269.       GOSUB newInput
  270.     ELSE
  271.       PRINT "short Input on   : xyz+             " 
  272.       in$="MST: "
  273.       GOSUB newInput
  274.     END IF
  275.     h$=LEFT$(bit$,1):i$=RIGHT$(bit$,1):zoom=0:lif=206:csp=0
  276.     IF mut THEN FOR n=0 TO an:z(n)=0:m(n)=0:NEXT n:mut=0
  277.     IF i$="." THEN zoom=1
  278.     IF h$="p" THEN
  279.       IF pmd=1 THEN
  280.         pmd=0
  281.       ELSE
  282.         pmd=1
  283.       END IF
  284.       CLS:GOTO gettingMSTsomehow
  285.     END IF  
  286.     IF h$="*" THEN putitin
  287.     IF h$="-" THEN eov=0:CLS:GOTO gettingMSTsomehow
  288.     IF i$="#" THEN h=LEN(bit$)-1:bit$=LEFT$(bit$,h):MST=VAL(bit$):mut=1
  289.     IF RIGHT$(bit$,1)="+" THEN                          
  290.       eov=1:eov$=LEFT$(bit$,LEN(bit$)-1)
  291.       CLS:GOTO gettingMSTsomehow
  292.     ELSEIF h$="," THEN
  293.       IF zoom THEN bit$=LEFT$(bit$,LEN(bit$)-1)                       
  294.       h=LEN(bit$)-1:bit$=RIGHT$(bit$,h):st=0:MST=0
  295.       FOR n=h-1 TO 0 STEP -1 
  296.         st=st+1:IF MID$(bit$,st,1)="1" THEN MST=MST+2^n
  297.       NEXT n
  298.     ELSEIF h$="<" THEN
  299.       h=LEN(bit$):w=VAL(MID$(bit$,2,h-2)):bit$=""
  300.       IF w>500 THEN CLS:GOTO gettingMSTsomehow
  301.       FOR n=1 TO w
  302.         IF RND*2>1 THEN h$="0":ELSE h$="1"
  303.         bit$=bit$+h$
  304.       NEXT n:csp=1
  305.     ELSE                                             
  306.       IF eov THEN bit$=eov$+bit$
  307.       h=VAL(bit$):MST=h
  308.       GOSUB DECtoBIN
  309.     END IF
  310.   END IF
  311.   h=LEN(bit$):h1=INT((an-h)/2):hl=h1:hr=h1+h              
  312.   IF hlm=0 AND hrm=0 THEN hlm=hr-3:hrm=hl+3
  313.   FOR n=hlm TO hrm
  314.     z(n)=0:m(n)=0:prt(n)=0
  315.   NEXT n
  316.   FOR n=hl TO hr-1
  317.     IF MID$(bit$,(n-hl)+1,1)="1" THEN z(n)=1
  318.   NEXT n
  319.   ypos=0:rsli=0:rsre=0:gen=1:hl=hl-3:hr=hr+3:pyc=7
  320.   GOSUB Display
  321.   IF zoom THEN
  322.     zoom$=""                                         
  323.     FOR n=260 TO 339
  324.       IF z(n)=1 THEN h$=CHR$(127):hs=1:ELSE h$=" "
  325.       zoom$=zoom$+h$
  326.     NEXT n
  327.     LOCATE 25,1:PRINT zoom$;
  328.   ELSE
  329.     FOR n=hl TO hr                                        
  330.       IF z(n) THEN
  331.         PSET (n,ypos)
  332.         prt(n)=prt(n)+2^pyc
  333.       END IF
  334.     NEXT:ypos=1:pyc=pyc-1
  335.   END IF
  336.   
  337.   CLOSE
  338.   OPEN "par:" FOR OUTPUT AS #6
  339.   
  340. CYCLEofLIFE:
  341.   IF ter THEN    
  342.     FOR n=hl TO hr
  343.       m(n)=zz(z(n-3)+z(n-2)+z(n-1)+z(n)+z(n+1)+z(n+2)+z(n+3))
  344.     NEXT n
  345.   ELSE                                                       
  346.     FOR n=hl TO hr
  347.       m(n)=zz(z(n-2)+z(n-1)+z(n)+z(n+1)+z(n+2))
  348.     NEXT n
  349.   END IF
  350.   IF mut THEN m(RND*an)=RND*1
  351.   hs=0                                                      
  352.   IF zoom THEN
  353.     zoom$="":FOR n=hl-rad TO hr+rad:z(n)=m(n):NEXT
  354.     FOR n=260 TO 339
  355.       IF z(n)=1 THEN h$=CHR$(127):hs=1:ELSE h$=" "
  356.       zoom$=zoom$+h$
  357.     NEXT n
  358.     SCROLL (0,0)-(640,200),0,-8
  359.     LOCATE 25,1:PRINT zoom$;
  360.     hlm=257:hrm=353
  361.   ELSE
  362.     FOR n=hl-rad TO hr+rad
  363.       z(n)=m(n)
  364.       IF z(n) THEN 
  365.         PSET(n,ypos):hs=1
  366.         prt(n)=prt(n)+2^pyc
  367.       END IF
  368.     NEXT    
  369.     pyc=pyc-1
  370.     IF pyc=-1 AND pmd=1 THEN      
  371.       PRINT #6,CHR$(27);"A";CHR$(8)
  372.       PRINT #6,CHR$(27);CHR$(42);CHR$(6);CHR$(88);CHR$(2);
  373.       FOR npr=1 TO 600
  374.         PRINT #6,CHR$(prt(npr));
  375.         prt(npr)=0
  376.       NEXT npr
  377.     END IF
  378.     IF pyc=-1 THEN pyc=7
  379.     ypos=ypos+1
  380.     IF ypos=lif THEN 
  381.       ypos=ypos-160
  382.       SCROLL (0,0)-(640,lif),0,-160
  383.     END IF
  384.   END IF
  385.   gen=gen+1:LOCATE 27,27:PRINT gen
  386.   IF hs=0 AND pyc=7 AND pmd=1 THEN 
  387.     PRINT #6,CHR$(27);CHR$(64) 
  388.     GOTO Waiting
  389.   ELSEIF hs=0 AND pmd=0 THEN 
  390.     GOTO Waiting
  391.   END IF
  392.   
  393.   IF ter THEN    
  394.     hlh=z(hl+3)+z(hl+2)+z(hl+1)+z(hl)
  395.     hrh=z(hr-3)+z(hr-2)+z(hr-1)+z(hr)
  396.     IF hlh<>0 AND hl>6 THEN hl=hl-3
  397.     IF hrh<>0 AND hr<an-6 THEN hr=hr+3
  398.     IF hl<hlm THEN hlm=hl
  399.     IF hr>hrm THEN hrm=hr
  400.     hlh=hlh+z(hl+4)+z(hl+5)+z(hl+6)
  401.     hrh=hrh+z(hr-4)+z(hr-5)+z(hr-6)
  402.     IF hlh=0 THEN hl=hl+3
  403.     IF hrh=0 THEN hr=hr-3
  404.   ELSE
  405.     hlh=z(hl+2)+z(hl+1)+z(hl)
  406.     hrh=z(hr-2)+z(hr-1)+z(hr)
  407.     IF hlh<>0 AND hl>4 THEN hl=hl-2
  408.     IF hrh<>0 AND hr<an-4 THEN hr=hr+2
  409.     IF hl<hlm THEN hlm=hl
  410.     IF hr>hrm THEN hrm=hr
  411.     hlh=hlh+z(hl+3)+z(hl+4)
  412.     hrh=hrh+z(hr-3)+z(hr-4)
  413.     IF hlh=0 THEN hl=hl+2
  414.     IF hrh=0 THEN hr=hr-2
  415.   END IF
  416.      
  417.   IF ter AND zoom=0 THEN
  418.     IF rgl=88 OR rgl=152 THEN
  419.       IF gen/20=INT(gen/20) THEN GOSUB BeamCleaner
  420.     END IF
  421.   END IF
  422.     
  423. a$=INKEY$:IF a$="" THEN CYCLEofLIFE
  424. IF lload THEN
  425.   IF a$="+" THEN
  426.     OPEN "MST.dat" FOR OUTPUT AS #3
  427.     WRITE #3,(nrmem-lnr)+1
  428.     FOR n=lnr TO nrmem
  429.       WRITE #3,mem(n)
  430.     NEXT n
  431.     CLOSE
  432.     a$="-"
  433.   END IF
  434.   IF a$="-" THEN lload=0:lnr=0:nrmem=0
  435. END IF
  436. Waiting:
  437.   IF pmd THEN  
  438.     PRINT #6,CHR$(27);CHR$(64)
  439.     CLOSE
  440.   END IF
  441.   WHILE (a$="")
  442.     a$=INKEY$
  443.   WEND
  444. IF lnr=nrmem THEN lload=0
  445. a$="":GOTO gettingMSTsomehow
  446.  
  447. BeamCleaner:
  448.   COLOR 2
  449.   FOR n=hl TO an:IF z(n)=0 THEN NEXT:ELSE emhl=n:h$=""
  450.   FOR n=emhl TO emhl+11
  451.     IF z(n)=1 THEN h$=h$+"1":ELSE h$=h$+"0"
  452.   NEXT
  453.   IF h$="111100110000" THEN
  454.     LINE (0,ypos)-(emhl+7,ypos),2
  455.     rsli=rsli+1:LOCATE (ypos/8),1:PRINT rsli 
  456.     FOR n=emhl TO emhl+11:z(n)=0:m(n)=0:NEXT
  457.     FOR n=hl TO an:IF z(n)=0 THEN NEXT n:ELSE hl=n-3
  458.   END IF
  459.   FOR n=hr TO 0 STEP -1:IF z(n)=0 THEN NEXT:ELSE emhr=n:h$=""
  460.   FOR n=emhr-11 TO emhr
  461.     IF z(n)=1 THEN h$=h$+"1":ELSE h$=h$+"0"
  462.   NEXT
  463.   IF h$="000011001111" THEN
  464.     LINE (emhr-7,ypos)-(600,ypos),2
  465.     rsre=rsre+1:LOCATE (ypos/8),71:PRINT rsre
  466.     FOR n=emhr-11 TO emhr:z(n)=0:m(n)=0:NEXT
  467.     FOR n=hr TO 0 STEP -1:IF z(n)=0 THEN NEXT:ELSE hr=n+3
  468.   END IF
  469.   COLOR 1
  470. RETURN
  471.     
  472. Display:
  473.     CLS
  474.     LOCATE 27,1 :PRINT "RAD: ";rad
  475.     LOCATE 27,15:PRINT "Generation: ";gen
  476.     LOCATE 28,1 :PRINT "RGL: "rgl
  477.     LOCATE 28,15:PRINT "(bin: "rgl$" )"
  478.     IF csp=0 THEN
  479.       LOCATE 29,1 :PRINT "MST: "MST;
  480.       LOCATE 29,15:PRINT "(bin: "bit$" )";
  481.     END IF
  482.     IF lload AND lnr<=nrmem THEN
  483.       IF com THEN 
  484.         COLOR 3:crsx=(80-LEN(comm$(lnr)))/2
  485.         LOCATE 26,crsx:PRINT comm$(lnr):COLOR 1
  486.       END IF
  487.       LOCATE 27,34:PRINT nrmem-lnr"patterns to go."
  488.       LOCATE 28,35:PRINT "break: - , save remaining MST & break: +"
  489.     END IF
  490. RETURN
  491.  
  492. DECtoBIN:
  493. bit$="":hs=0
  494.   FOR n=50 TO 0 STEP -1
  495.     IF h=>2^n THEN 
  496.       bit$=bit$+"1":h=h-2^n:hs=1
  497.     ELSEIF hs THEN 
  498.       bit$=bit$+"0"
  499.     END IF
  500.   NEXT n
  501. RETURN
  502.  
  503. getMuster:
  504.   FOR n=0 TO an:IF z(n)=0 THEN NEXT
  505.   emhl=n
  506.   FOR n=an TO 0 STEP -1:IF z(n)=0 THEN NEXT
  507.   emhr=n:h$=""
  508.   FOR n=emhl TO emhr:IF z(n)=1 THEN h$=h$+"1":ELSE h$=h$+"0"
  509.   NEXT
  510. RETURN
  511.   
  512. EM3152:
  513.   GOSUB getMuster
  514.   IF h$="111" OR h$="11111" OR h$="1100011" THEN nm=1:REM MST 7
  515.   IF h$="1111111" OR h$="110010011" THEN nm=1        :REM MST 127
  516.   IF h$="11001111" OR h$="11110011" THEN nm=1        :REM MST 207/315
  517.   IF h$="11111111" OR h$="1100110011" THEN nm=1      :REM MST 819
  518. RETURN
  519.  
  520. EM388:
  521.   GOSUB getMuster:nmh=0
  522.   IF h$="111" OR h$="11111" OR h$="1100011" THEN nm=1:REM MST 7,MST 207/315
  523.   IF LEFT$(h$,12)="111100110000" AND RIGHT$(h$,12)="000011001111" THEN nmh=1
  524.   IF nmh THEN FOR n=emhl+12 TO emhr-12:IF z(n)=0 THEN NEXT:nm=1
  525. RETURN
  526.  
  527. EM220:
  528.   GOSUB getMuster
  529.   IF h$="10010111" OR h$="11101001" THEN nm=1:REM 151
  530.   IF h$="10111101" THEN nm=1:REM 189
  531.   IF h$="1001111011" OR h$="1101111001" THEN nm=1:REM 635/889
  532.   IF h$="10111011" OR h$="101011011" OR h$="1100001011" THEN nm=1
  533.   IF h$="111100010011" OR h$="10110110010111" THEN nm=1
  534.   IF h$="100010101101001" OR h$="101100000111" THEN nm=1
  535.   IF h$="1001100010001" OR h$="1011110001" THEN nm=1
  536.   IF h$="11011101" OR h$="110110101" OR h$="1101000011" THEN nm=1
  537.   IF h$="110010001111" OR h$="11101001101101" THEN nm=1
  538.   IF h$="100101101010001" OR h$="111000001101" THEN nm=1
  539.   IF h$="1000100011001" OR h$="1000111101" THEN nm=1:REM 187/221
  540.   IF h$="11111000011111" THEN nm=1
  541.   IF h$="1010101001010101" THEN nm=1
  542.   IF h$="1101011111101011" THEN nm=1
  543.   IF h$="110000110011000011" THEN nm=1
  544.   IF h$="11110011100111001111" THEN nm=1
  545.   IF h$="1011000000000000001101" THEN nm=1
  546.   IF h$="1001100000000000011001" THEN nm=1
  547.   IF h$="10111000000000011101" THEN nm=1
  548.   IF h$="10100100000000100101" THEN nm=1
  549.   IF h$="11111000000000011111" THEN nm=1
  550.   IF h$="1010101000000001010101" THEN nm=1
  551.   IF h$="1101011000000001101011" THEN nm=1
  552.   IF h$="110000011000000110000011" THEN nm=1
  553.   IF h$="11110001111000011110001111" THEN nm=1
  554.   IF h$="1011011101101001011011101101" THEN nm=1
  555.   IF h$="1000110110001111000110110001" THEN nm=1
  556.   IF h$="111010111101101111010111" THEN nm=1
  557.   IF h$="10010001111100111110001001" THEN nm=1
  558.   IF h$="110011010100001010110011" THEN nm=1
  559.   IF h$="11100100011000011000100111" THEN nm=1
  560.   IF h$="1000010011111001111100100001" THEN nm=1
  561.   IF h$="1001010000101001" THEN nm=1:REM 15903
  562. RETURN
  563.  
  564. newInput:
  565.   PRINT in$:bit$="" 
  566.   newInputMarke:
  567.   h$=INKEY$
  568.     IF h$="" THEN newInputMarke
  569.     hh1=1:hh2=1:hh3=1:hh4=1
  570.     IF (h$<>"<" AND h$<>">" AND h$<>"," AND h$<>"#") THEN hh1=0
  571.     IF (h$<>"*" AND h$<>"-" AND h$<>"+" AND h$<>"." AND h$<>"p") THEN hh2=0
  572.     hhh=0
  573.     FOR n=0 TO 9
  574.       IF ASC(h$)=n+48 THEN hhh=1
  575.     NEXT n
  576.     IF hhh=0 THEN hh3=0
  577.     IF (ASC(h$)<>8 AND ASC(h$)<>13) THEN hh4=0
  578.     IF hh1=0 AND hh2=0 AND hh3=0 AND hh4=0 THEN newInputMarke
  579.   IF ASC(h$)=13 THEN RETURN
  580.   IF ASC(h$)=8 AND bit$<>"" THEN 
  581.     bit$=LEFT$(bit$,LEN(bit$)-1)
  582.     LOCATE CSRLIN-1,7:PRINT bit$"  "
  583.   ELSEIF ASC(h$)<>8 THEN
  584.     bit$=bit$+h$
  585.     LOCATE CSRLIN-1,6+LEN(bit$):PRINT h$
  586.   END IF
  587.   GOTO newInputMarke
  588.     
  589.   
  590.   
  591.